home *** CD-ROM | disk | FTP | other *** search
/ Cream of the Crop 1 / Cream of the Crop 1.iso / PROGRAM / CLPMOUSE.ARJ / MENUTO.PRG < prev    next >
Text File  |  1991-06-17  |  4KB  |  145 lines

  1. /*-----------------------*/
  2. /* Mouse functions       */
  3. /* MENU TO replacement   */
  4. /*-----------------------*/
  5.  
  6. /* MENU TO - This function replaces the MENU TO function for CLIPPER 5.0 / 5.1
  7.              
  8.          Replacement is accomplished by using the functions below as specd
  9.  
  10.          MPROMPT(expC) -    Adds the prompt at the corresponding window
  11.                             location, beginning at 1.
  12.                 
  13.          MMENUTO(expN, expC)
  14.                     -    Resets the prompts if expN = 0
  15.                -    Begins the prompting
  16.                -    double-click or <enter> on correct one
  17.                     -    colorization by expC
  18. */
  19.  
  20. FUNCTION MPROMPT(string)
  21.  
  22. aadd(menuto_ARR,string)
  23.  
  24. FUNCTION MMENUTO(exp1,pmcolor)
  25. local pt,x,y,x1,y1,leng,sx,set_disp,old_position,cur_position,mbut,mkey,loc
  26. local ax,ay,ab,wx
  27.  
  28. if exp1 = 0
  29.    public menuto_ARR
  30.    menuto_ARR = array(0)
  31.    return(NIL)
  32. endif
  33.  
  34. /* get window coordinates */
  35. fseek(winhndl,0)
  36. fvbl = val(freadstr(winhndl,10))
  37. fseek(winhndl,fvbl-4)
  38. vblen = val(freadstr(winhndl,4))
  39. fseek(winhndl,-1*(vblen+4),1)
  40. ptr = fseek(winhndl,0,1)
  41. pt = freadstr(winhndl,vblen)
  42. x = val(subs(pt,1,2))
  43. y = val(subs(pt,4,2))
  44. x1 = val(subs(pt,7,2))
  45. y1 = val(subs(pt,10,2))
  46. pt = subs(pt,13)
  47.  
  48. /* put in array information */
  49.  
  50. leng = (y1-y) - 2
  51. for sx = 1 to len(menuto_ARR)
  52.     if x+sx < x1        
  53.        @ x+(sx),y+1 say subs(menuto_ARR[sx],1,leng)
  54.     endif
  55. next
  56.  
  57. set_disp = .t.
  58. old_position = 1
  59. cur_position = 1
  60. do while .t. 
  61.    mbut=SMOUSE(x,y,x1-1,y1-2,1,3)
  62.    mkey = inkey()
  63.    if mkey<>0.or.mbut<>NIL       
  64.       do case
  65.          case mkey = 1
  66.           set_disp = .t.
  67.           cur_position = 1
  68.      case mkey = 6
  69.           set_disp = .t.
  70.           cur_position = len(menuto_ARR)
  71.          case mkey > 47 .and. mkey < 128
  72.           loc = 0
  73.           for n = 1 to len(menuto_ARR)
  74.               if subs(menuto_ARR[n],1,1) = chr(mkey)
  75.              loc = n
  76.              keyboard(chr(13)+chr(13))
  77.           endif
  78.           next
  79.           if loc <> 0
  80.              set_disp = .t.
  81.          cur_position = loc
  82.               endif
  83.      case mkey = 27
  84.           return(0)
  85.          case mkey = 5 .or. mkey = 19
  86.           set_disp = .t.
  87.               cur_position = cur_position-1
  88.                  if cur_position < 1
  89.              if set(35)
  90.                 cur_position = len(menuto_ARR)
  91.          else
  92.             cur_position = 1
  93.          endif
  94.           endif
  95.          case mkey = 24 .or. mkey = 4
  96.           set_disp = .t.
  97.               cur_position = cur_position+1
  98.               if cur_position > len(menuto_ARR)
  99.              if set(35)
  100.                 cur_position = 1
  101.          else
  102.             cur_position = len(menuto_ARR)
  103.          endif
  104.           endif
  105.          case mkey = 13 .or. mkey = 18 .or. mkey = 3
  106.               return(cur_position)
  107.          case mbut <> NIL
  108.               ax = val(subs(mbut,1,2))
  109.           ay = val(subs(mbut,3,2))
  110.           ab = val(subs(mbut,5))
  111.           wx = (ax-x)
  112.           set_disp = .t.
  113.           if wx < 1
  114.              wx = 1
  115.          if old_position = wx
  116.             set_disp = .f.
  117.          endif
  118.           endif
  119.           if wx > len(menuto_ARR)
  120.              wx = len(menuto_ARR)
  121.          if old_position = wx
  122.             set_disp = .f.
  123.              endif
  124.               endif
  125.           if wx = old_position           
  126.              return(cur_position)           
  127.           endif
  128.           cur_position = wx
  129.       endcase
  130.    endif
  131.    if set_disp = .t.
  132.        @ x+(old_position),y+1 say subs(menuto_ARR[old_position],1,leng)
  133.        ocolor=setcolor()
  134.        setcolor(pmcolor)
  135.        @ x+(cur_position),y+1 say subs(menuto_ARR[cur_position],1,leng)
  136.        setcolor(ocolor)
  137.        old_position = cur_position
  138.        set_disp = .f.
  139.        if mbut <> nil
  140.           mbut = nil
  141.           inkey(.20)    /* allow button release for double click! */
  142.        endif
  143.     endif      
  144. enddo     
  145.